home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_1 / poly_ws < prev    next >
Internet Message Format  |  1995-03-31  |  21KB

  1. From: Wayne H Scott <wscott@ecn.purdue.edu>
  2. Subject:  v04i009:  poly_ws - Polynomial routines v3.1, Part01/01
  3. Newsgroups: comp.sources.hp48
  4. Organization: Purdue University Engineering Computer Network
  5. Followup-To: comp.sys.hp48
  6. Approved: spell@seq.uncwil.edu
  7.  
  8. Checksum: 1208114809 (verify with brik -cv)
  9. Submitted-by: Wayne H Scott <wscott@ecn.purdue.edu>
  10. Posting-number: Volume 4, Issue 9
  11. Archive-name: poly_ws/part01
  12.  
  13. [ This was reposted by me since the previous laplace programs (v04i008)
  14. need these programs.  -chris ]
  15.  
  16. BEGIN_DOC poly.doc
  17. Here it is, my polynomial routines version 3.2
  18.  
  19. Changes from version 3.1:
  20.     - Faster PMUL
  21.     - RT now works with complex cooeffients
  22.     - various bug fixes
  23.  
  24. These routines are in the public domain, but I ask that if you use any of 
  25. them in one of your programs you give me credit.  I am also
  26. not responsible for any damage caused by these programs.
  27.  
  28. This package include the following programs.
  29.  
  30. TRIM    Strip leading zeros from polynomial object.
  31. IRT    Invert root program.  Given n roots it return a nth degree polynomial.
  32. PDER    Derivative of a polynomial.
  33. RDER    Derivative of a rational function.
  34. PF    Partial Fractions.  (Handles multiple roots!)
  35. FCTP    Factor polynomial
  36. RT    Find roots of any polynomial
  37. L2A    Convert a list to an array and back.
  38. PADD    Add two polynomials
  39. PMUL    Multiply two polynomials.
  40. PDIV    Divide two polynomials.
  41. EVPLY    Evalulate a polynomial at a point.
  42. COEF    Given an equation return a polynomial list.
  43.  
  44. These programs are for the HP-48sx.  I have a version of them that works
  45. correctly on the HP-28.  Send me mail if you want it.
  46.  
  47. I think people will find these very useful and work as I say, but if you
  48. find any bugs please send me E-Mail.  Comments are also welcome.
  49.  
  50. Some of these routines could be faster (PF, PMUL, ...) tell me if you know
  51. how to speed them up.
  52.  
  53. _______________________________________________________________________________
  54. Wayne Scott             |  INTERNET:   wscott@en.ecn.purdue.edu
  55. Electrical Engineering  |  BITNET:     wscott%ea.ecn.purdue.edu@purccvm
  56. Purdue University       |  UUCP:      {purdue, pur-ee}!en.ecn.purdue.edu!wscott
  57. _______________________________________________________________________________
  58.  
  59.  
  60. These programs all work on polynomials in the follows form:
  61.  
  62. 3*X^3-7*X^2+5 is entered as  { 3 -7 0 5 }
  63.  
  64.  
  65. Reasons why I use lists instead of arrays include:
  66.  
  67.         * lists look better on the stack.  (multi-line)
  68.         * The interactive stack can quickly put serveral items in a
  69.           list.
  70.         * Hitting EVAL will quickly return the elements on a list.
  71.         * the '+' key will add a element to the end or beginning of a list
  72.           or concat two lists
  73.         * Internally the main program that needs to be fast (BAIRS)
  74.           does 100% stack maniplations so speed of arrays vs. lists was
  75.           not a major issue.
  76.         * It would be easier for later releases to include symbolic
  77.           polynomials.
  78.  
  79. so going down the list...
  80.  
  81. The first program is FCTP. (factor polynomial)
  82. When it is passed the cooeficients of a polynomial in a list it returns the
  83. factor of that polynomal.  ex:
  84.  
  85. 1: { 1 -17.8 99.41 -261.218 352.611 -134.106 }
  86. FCTP
  87. 3: { 1 -4.2 2.1 }
  88. 2: { 1 -3.3 6.2 }
  89. 1: { 1 -10.3 }
  90.  
  91. This tells us that X^5-17.8*X^4+99.41*X^3-261.218*X^2+352.611*X-134.106
  92. factors to (X^2-4.2*X+2.1)*(X^2-3.3*X+6.2)*(X-10.3)
  93.  
  94. Neat!
  95.  
  96. The next program is RT. (Roots)
  97. If given a polynmoial it return its roots.  ex:
  98.  
  99. 1: { 1 -17.8 99.41 -261.218 352.611 -134.106 }
  100. RT
  101. 5: 3.61986841536
  102. 4: .58013158464
  103. 3: (1.65, 1.8648056199)
  104. 2: (1.65, -1.8648056199)
  105. 1: 10.3
  106.  
  107. Very Useful!
  108. RT with work with complex cooeffients in the polynomial.
  109.  
  110. These programs use the BAIRS program which performs Bairstow's method of
  111. quadratic factors and QUD with does the quadratic equation.
  112.  
  113. TRIM  is used to strip the leading zeros from a polynomial list.
  114.  
  115. {0 0 3 0 7 } TRIM => { 3 0 7 }
  116.  
  117. RDER  will give the derivative of a rational function.
  118.  
  119. ie. d        x + 4                   -X^2 - 8*x + 31
  120.     --   -------------  =   --------------------------------
  121.     dx   x^2 - 7*x + 3      x^4 - 14*x^3 + 55*x^2 - 42*x + 9
  122.  
  123. 2: { 1 4 }
  124. 1: { 1 -7 3 }
  125. RDER
  126. 2: { -1 -8 31 }
  127. 1: { 1 -14 55 -42 9 }
  128.  
  129. I don't know about you but I think it's useful.
  130.  
  131. IRT will return a polynomial whose roots you specify.
  132.  
  133. ie.  If a transfer function has zeros at -1, 1 and 5 the function
  134.      is x^3 - 5*x^2 - x + 5
  135.  
  136. 1: { -1 1 5 }
  137. IRT
  138. 1: { 1 -5 -1 5 }
  139.  
  140. PDER will return the derivtive of a polynomial.
  141.  
  142. .ie   The  d/dx (x^3 - 5*x^2 - x + 5) = 3*x^2 - 10*x - 1
  143.  
  144. 1: { 1 -5 -1 5 }
  145. PDER
  146. 1: { 3 -10 -1 }
  147.  
  148. PF will do a partial fraction expansion on a transfer function.
  149.  
  150. .ie       s + 5             1/18    5/270    2/3      1/9       2/27
  151.      ----------------- = ----- + ----- - ------- - ------- - -----
  152.      (s-4)(s+2)(s-1)^3   (s-4)   (s+2)   (s-1)^3   (s-1)^2   (s-1) 
  153.  
  154. 2: { 1 5 }
  155. 1: { 4 -2 1 1 1 }
  156. PF
  157. 1: { 5.5555e-2 1.85185e-2 -.6666 -.11111 -.074074 }
  158.  
  159. This program expects the polynomial of the numerator to be on level 2 and
  160. a list with the poles to be on level 1.  Repeated poles are suported but
  161. they must be listed in order.  The output is a list of the values of the 
  162. fraction in the same order as the poles were entered.
  163.  
  164. PADD, PMUL, and PDIV are all obvious, they take two polynomial lists off
  165. the stack and perform the operation on them.
  166.  
  167. PDIV returns the polynomial and the remainder polynomial.
  168.  
  169. L2A converts a list to and array. (and back)
  170.  
  171. 1: { 1 2 3 }
  172. L2A
  173. 1: [ 1 2 3 ]
  174. L2A
  175. 1: { 1 2 3 }
  176.  
  177. EVPLY evalutates and polynomial at a point.
  178.  
  179. x^3 - 3*x^2 +10*x - 5 | x=2.5   = 16.875
  180.  
  181. 2: { 1 -3 10 -5 }
  182. 1: 2.5
  183. EVPLY
  184. 1: 16.875
  185.  
  186. P.S. Many thanks to Mattias Dahl & Henrik Johansson for fixs they have
  187.      made.
  188.  
  189. END_DOC
  190.  
  191. BEGIN_RPL poly.rpl
  192. %%HP: T(3)A(R)F(.);
  193. DIR
  194.   PDIV
  195.   \<< DUP SIZE 3 ROLLD OBJ\-> \->ARRY SWAP OBJ\-> \->ARRY \-> c b a
  196.      \<< a b 
  197.          IF c 1 SAME THEN
  198.            OBJ\-> DROP / OBJ\-> 1 GET \->LIST { 0 }
  199.          ELSE           
  200.            WHILE
  201.              OVER SIZE 1 GET c \>=
  202.            REPEAT DIVV
  203.            END
  204.            DROP \-> d
  205.            \<< a SIZE 1 GET c 1 - - IF DUP NOT THEN
  206.            1 END \->LIST d OBJ\-> OBJ\-> DROP \->LIST
  207.            \>>
  208.         END
  209.      \>>
  210.   \>>
  211.   TRIM
  212.   \<< OBJ\-> \-> n
  213.      \<< n
  214.          WHILE ROLL DUP ABS NOT n 1 - AND
  215.          REPEAT DROP 'n' DECR
  216.          END n ROLLD
  217.          n \->LIST
  218.      \>>
  219.   \>>
  220.       RDER
  221.         \<< \-> F G
  222.           \<< G F
  223. PDER PMUL G PDER {
  224. -1 } PMUL F PMUL
  225. PADD G G PMUL
  226.           \>>
  227.         \>>
  228.       IRT
  229.         \<< OBJ\-> \-> n
  230.           \<<
  231.             IF n 0
  232. >
  233.             THEN 1
  234. n
  235.               START
  236. n ROLL { 1 } SWAP
  237. NEG +
  238.               NEXT
  239.             ELSE {
  240. 1 }
  241.             END
  242.             IF n 1
  243. >
  244.             THEN 2
  245. n
  246.               START
  247. PMUL
  248.               NEXT
  249.             END
  250.           \>>
  251.         \>>
  252.       PDER
  253.         \<< OBJ\-> \-> n
  254.           \<< 1 n
  255.             FOR i n
  256. ROLL n i - *
  257.             NEXT
  258. DROP
  259.             IF n 1
  260. ==
  261.             THEN {
  262. 0 }
  263.             ELSE n
  264. 1 - \->LIST
  265.             END
  266.           \>>
  267.         \>>
  268.       PF
  269.         \<< MAXR { }
  270. \-> Z P OLD LAST
  271.           \<< 1 P
  272. SIZE
  273.             FOR I P
  274. I GET \-> p1
  275.               \<<
  276. IF p1 OLD \=/
  277. THEN Z p1 EVPLY 1 P
  278. SIZE
  279.   FOR J
  280.     IF P J GET P I
  281. GET \=/
  282.     THEN p1 P J GET
  283. - /
  284.     END
  285.   NEXT p1 'OLD' STO
  286. { } 'LAST' STO
  287. ELSE
  288.   IF { } LAST SAME
  289.   THEN 1 { } 1 P
  290. SIZE
  291.     FOR K P K GET
  292.       IF DUP p1 ==
  293.       THEN DROP
  294.       ELSE +
  295.       END
  296.     NEXT IRT Z SWAP
  297.   ELSE LAST OBJ\->
  298. DROP
  299.   END RDER DUP2 5
  300. PICK 1 + 3 ROLLD 3
  301. \->LIST 'LAST' STO p1
  302. EVPLY SWAP p1 EVPLY
  303. SWAP / SWAP ! /
  304. END
  305.               \>>
  306.             NEXT P
  307. SIZE \->LIST
  308.           \>>
  309.         \>>
  310.       FCTP
  311.         \<<
  312.           IF DUP
  313. SIZE 3 >
  314.           THEN DUP
  315. BAIRS SWAP OVER
  316. PDIV DROP FCTP
  317.           END
  318.         \>>
  319.       RT
  320.         \<< TRIM DUP
  321. SIZE \-> n
  322.           \<<
  323.             IF n 3
  324. >
  325.             THEN
  326. DUP BAIRS SWAP OVER
  327. PDIV DROP \-> A B
  328.               \<< A
  329. RT B RT 
  330.               \>>
  331.             ELSE
  332.               IF n
  333. 2 >
  334.               THEN
  335. QUD 
  336.               ELSE
  337. LIST\-> DROP NEG SWAP
  338. /
  339.               END
  340.             END 
  341.           \>>
  342.         \>>
  343.       L\178A
  344.         \<<
  345.           IF DUP
  346. TYPE 5 ==
  347.           THEN OBJ\->
  348. \->ARRY
  349.           ELSE OBJ\->
  350. 1 GET \->LIST
  351.           END
  352.         \>>
  353.       PADD
  354.         \<< DUP2 SIZE
  355. SWAP SIZE \-> A B nB
  356. nA
  357.           \<< A L\178A B
  358. L\178A
  359.             IF nA
  360. nB <
  361.             THEN
  362. SWAP
  363.             END
  364.             IF nA
  365. nB \=/
  366.             THEN 1
  367. nA nB - ABS
  368.               START
  369. 0
  370.               NEXT
  371.             END nA
  372. nB - ABS 1 + ROLL
  373. OBJ\-> 1 GET nA nB -
  374. ABS + \->ARRY + L\178A
  375.           \>>
  376.         \>>
  377.       PMUL
  378.         \<< DUP2 SIZE
  379. SWAP SIZE \-> X Y  ny
  380. nx
  381.           \<<
  382.         1 nx ny + 1 - FOR I
  383.            0 
  384.         NEXT
  385.         1 nx FOR I
  386.            1 ny FOR J
  387.          I J + 1 - ROLL
  388.          X I GET Y J GET * +
  389.          I J + 1 - ROLLD
  390.            NEXT
  391.         NEXT
  392.         { }
  393.         1 nx ny + 1 - START
  394.           SWAP +
  395.         NEXT
  396.      \>>
  397.     \>>
  398.       EVPLY
  399.         \<< OVER
  400.           IF DUP
  401. TYPE 5 ==
  402.           THEN SIZE
  403.           ELSE SIZE
  404. 1 GET
  405.           END \-> a r
  406. n
  407.           \<< a 1 GET
  408.             IF n 1
  409. >
  410.             THEN 2
  411. n
  412.               FOR i
  413. r * a i GET +
  414.               NEXT
  415.             END
  416.           \>>
  417.         \>>
  418.       COEF
  419.         \<< \-> E n
  420.           \<< 0 n
  421.             FOR I 0
  422. 'X' STO E EVAL 'X'
  423. PURGE E 'X' \.d 'E'
  424. STO I ! /
  425.             NEXT 2
  426. n 1 +
  427.             FOR I I
  428. ROLL
  429.             NEXT n
  430. 1 + \->LIST
  431.           \>>
  432.         \>>
  433.       EQ 1
  434.   DIVV
  435.     \<< DUP 1 GET \-> a
  436. b c
  437.       \<< a 1 GET c /
  438. DUP b * a SIZE RDM
  439. a SWAP - OBJ\-> 1
  440. GETI 1 - PUT \->ARRY
  441. SWAP DROP b
  442.       \>>
  443.     \>>
  444.   QUD
  445.     \<< LIST\-> \->ARRY
  446. DUP 1 GET / ARRY\->
  447. DROP ROT DROP SWAP
  448. 2 / NEG DUP SQ ROT
  449. - \v/ DUP2 + 3 ROLLD
  450. -
  451.     \>>
  452.   BAIRS
  453.     \<< OBJ\-> 1 1 \-> n
  454. R S
  455.       \<<
  456.         DO 0 n 1 +
  457. PICK 0 0 0 4 PICK 5
  458. n + 7
  459.           FOR J J
  460. PICK R 7 PICK * + S
  461. 8 PICK * + 7 ROLL
  462. DROP DUP 6 ROLLD R
  463. 3 PICK * + S 4 PICK
  464. * + 5 ROLL DROP -1
  465.           STEP 3
  466. PICK SQ 3 PICK 6
  467. PICK * -
  468.           IF DUP 0
  469. ==
  470.           THEN DROP
  471. 1 1
  472.           ELSE 6
  473. PICK 6 PICK * 5
  474. PICK 9 PICK * -
  475. OVER / 4 PICK 9
  476. PICK * 8 PICK 7
  477. PICK * - ROT /
  478.           END DUP
  479. 'S' STO+ SWAP DUP
  480. 'R' STO+
  481.         UNTIL (0,1) * +
  482. ABS .000000001 < 7
  483. ROLLD 6 DROPN
  484.         END n DROPN
  485. 1 R NEG S NEG 3
  486. \->LIST
  487.       \>>
  488.     \>>
  489. END
  490. END_RPL
  491.  
  492.  
  493. BEGIN_ASC poly.asc
  494. %%HP: T(3)A(R)F(.);
  495. "69A20FF7EE4100000050241494253550D9D20E1632B7FC19C2A29C2A21C432D6
  496. E2010E6D6E201025D6E201035E16323C0324B2A2D6E2010E69C2A276BA1A9CF1
  497. 4B2A24B2A24B2A2803A2A9CF1D13A2D6E2010E676BA1743A20A132D6E2010A4D
  498. 6E2010A4A9CF1D6E201025743A2A9CF1EEDA176BA1D6E201035C53A2A9CF1EED
  499. A176BA1743A25BCF18DBF178BF1233A20DCF1D6E2010253F2A2A9CF1EEDA176B
  500. A1D6E201035803A2A9CF1EEDA176BA1D13A25BCF18DBF1683A2083323F2A2A9C
  501. F1624B13F2A2A9CF1233A2A9CF1EEDA190DA13CE2278BF14B2A2279E1AFE22D9
  502. D208DBF19C2A29C2A2B21305BF22D9D20233A2A9CF1233A2A9CF1EEDA1D13A2A
  503. 9CF1173A2A9CF1EEDA190DA192CF150FA1803A2A9CF1173A2A9CF1EEDA1C53A2
  504. A9CF1743A2A9CF1EEDA190DA1E0CF150FA1B21305DF2278BF145632D6E201035
  505. 97632B4402DBBF178BF145632D6E20102597632B4402DE032779200000000000
  506. 0000000000000000000010EEDA176BA1F1AA1339201990000000000010EBBE17
  507. 43A20DCF1233A246CF19B632D6E2010E646CF19C2A2D6E201025599A1D6E2010
  508. 35599A13F2A2387C1EF53293632B2130E43003015554430D9D20E1632A59C190
  509. 0D178BF19C2A26C7D150FA1290D18DBF1E0CF18DBF1DBBF1ED2A250FA1599A17
  510. 8BF1624B1E0CF190DA1473B12ABF176BA13F2A20DCF190DA193632B213069000
  511. 404494656540D9D20E163278BF19C2A26C7D11C432D6E201016D6E201026D6E2
  512. 01036E1632D6E2010169C2A26C7D1D6E20103650FA178BF1D6E201026EEDA1D6
  513. E2010168B9C1FD0D1D6E201016DBBF190DA1B7FC19C2A27C8D19C2A290DA1704
  514. D1900D1DBBF18DBF1D6E201026EF53293632B21309E000205415203392000000
  515. 00000000010D10004034F4546440D9D20E16321C432D6E201054D6E2010E6E16
  516. 324B2A2D6E2010E60A132D6E2010944B2A24563284E20108597632DCC02D6E20
  517. 1054EB3A14563284E20108597632EFE02D6E2010544563284E20108597632E7F
  518. E145632D6E20105497632DCC02D6E20109420BB150FA1C4232ED2A2D6E2010E6
  519. 9C2A276BA10A132D6E201094D6E2010945BCF1C4232D6E2010E69C2A276BA138
  520. 7C1EF53293632B21302410050546505C49550D9D20E163292CF13CE2278BF168
  521. BC1D13A2279E1AFE228B9C15BF22D9D208B9C19C2A26C7D1B21305DF221C432D
  522. 6E201016D6E201027D6E2010E6E1632D6E2010169C2A26C7D13CE22D6E2010E6
  523. 9C2A2D5CE1AFE22D9D20ED2A2D6E2010E60A132D6E201096D6E201027EEDA1D6
  524. E201016D6E2010966C7D176BA1C4232B21305DF22EF53293632B213012100400
  525. 5D455C440D9D20E16322ABF18B9C1DBBF18B9C11C432D6E201085D6E201095D6
  526. E2020E697D6E2020E687E16329C2A2D6E2020E687D6E2020E69776BA19C2A290
  527. DA10A132D6E2010944B2A2C42329C2A2D6E2020E6870A132D6E2010949C2A2D6
  528. E2020E6970A132D6E2010A4D6E201094D6E2010A476BA19C2A290DA15BCF1D6E
  529. 201085D6E2010946C7D1D6E201095D6E2010A46C7D1EEDA176BA1D6E201094D6
  530. E2010A476BA19C2A290DA10DCF1C4232C423247A20B21309C2A2D6E2020E687D
  531. 6E2020E69776BA19C2A290DA130132DBBF176BA1C4232EF53293632B2130FB10
  532. 0400514444440D9D20E16322ABF18B9C1DBBF18B9C11C432D6E201014D6E2010
  533. 24D6E2020E624D6E2020E614E1632D6E20101484E2030C42B14D6E20102484E2
  534. 030C42B143CE22D6E2020E614D6E2020E624EBBE1AFE22DBBF15DF223CE22D6E
  535. 2020E614D6E2020E624D9AE1AFE22D9D209C2A2D6E2020E614D6E2020E62490D
  536. A1F1AA1301324B2A2C4232B21305DF22D6E2020E614D6E2020E62490DA1F1AA1
  537. 9C2A276BA15BCF1B7FC19C2A26C7D1D6E2020E614D6E2020E62490DA1F1AA176
  538. BA1900D176BA184E2030C42B14EF53293632B21308A10030C42B1430D9D20E16
  539. 323CE2278BF168BC1D13A2279E1AFE22D9D20B7FC1900D1B21305BF22D9D20B7
  540. FC19C2A26C7D1387C1B21305DF2293632B21308700020254520D9D20E163284E
  541. 2040452594D478BF18B9C11C432D6E2010E6E16323CE22D6E2010E63F2A2D5CE
  542. 1AFE22D9D2078BF184E20502414942535DBBF192CF184E2040054494658DBF11
  543. C432D6E201014D6E201024E1632D6E20101484E20202545D6E20102484E20202
  544. 545EF532B21305BF22D9D203CE22D6E2010E6ED2A2D5CE1AFE2284E203015554
  545. 45BF22D9D20A59C18DBF1599A1DBBF150FA1B21305DF22B21305DF22EF532936
  546. 32B2130C5100406434450540D9D20E16323CE2278BF18B9C13F2A2D5CE1AFE22
  547. D9D2078BF184E20502414942535DBBF192CF184E2040054494658DBF184E2040
  548. 64344505B21305DF2293632B21300900020056420D9D20E1632FDAA147A20B21
  549. 301C432D6E2010A5D6E201005D6E2030F4C444D6E2040C4143545E16329C2A2D
  550. 6E2010058B9C10A132D6E201094D6E201005D6E2010946C7D11C432D6E202007
  551. 13E16323CE22D6E20200713D6E2030F4C444D9AE1AFE22D9D20D6E2010A5D6E2
  552. 020071384E2050546505C4959C2A2D6E2010058B9C10A132D6E2010A43CE22D6
  553. E201005D6E2010A46C7D1D6E201005D6E2010946C7D1D9AE1AFE22D9D20D6E20
  554. 200713D6E201005D6E2010A46C7D190DA150FA1B21305DF22C4232D6E2020071
  555. 345632D6E2030F4C44497632DCC0247A20B213045632D6E2040C414354597632
  556. DCC02B21305BF22D9D203CE2247A20B2130D6E2040C4143545167E1AFE22D9D2
  557. 09C2A247A20B21309C2A2D6E2010058B9C10A132D6E2010B4D6E201005D6E201
  558. 0B46C7D13CE2278BF1D6E20200713279E1AFE228DBF15BF2276BA15DF22C4232
  559. 84E2030942545D6E2010A5DBBF1B21305BF22D9D20D6E2040C4143545B7FC18D
  560. BF1B21305DF2284E2040254454252ABF1D13A2A9CF19C2A276BA13F2A20DCF13
  561. F2A2387C145632D6E2040C414354597632DCC02D6E2020071384E2050546505C
  562. 495DBBF1D6E2020071384E2050546505C495DBBF150FA1DBBF120BB150FA1B21
  563. 305DF22EF532C4232D6E2010058B9C1387C1EF53293632B21302D30040054454
  564. 2540D9D20E1632B7FC11C432D6E2010E6E16329C2A2D6E2010E60A132D6E2010
  565. 96D6E2010E65BCF1D6E2010E6D6E20109690DA1EEDA1C42328DBF13CE22D6E20
  566. 10E69C2A2279E1AFE2247A204B2A2B21305BF22D9D20D6E2010E69C2A290DA13
  567. 87C1B21305DF22EF53293632B21305E0003094254530D9D20E1632B7FC11C432
  568. D6E2010E6E16323CE22D6E2010E64B2A2D5CE1AFE22D9D209C2A2D6E2010E630
  569. 132D6E2010E65BCF147A209C2A2B2130DBBF1599A176BA1C4232B21305BF2247
  570. A209C2A2B21305DF223CE22D6E2010E69C2A2D5CE1AFE22D9D20ED2A2D6E2010
  571. E63013284E204005D455C4C4232B21305DF22EF53293632B2130211004025445
  572. 42540D9D20E16321C432D6E201064D6E201074E1632D6E201074D6E20106484E
  573. 20400544542584E204005D455C4D6E20107484E20400544542547A20683A2B21
  574. 3084E204005D455C4D6E20106484E204005D455C484E204005144444D6E20107
  575. 4D6E20107484E204005D455C4EF53293632B2130FE00040452594D440D9D20E1
  576. 632B7FC11C432D6E2010E6E1632D6E2010E6330325BCF178BF1F1AA1F88E1D6E
  577. 2010E69C2A290DA1387E1D5032D9D208DBF145632D6E2010E697632AA902B213
  578. 049632D6E2010E60DCF1D6E2010E6387C1EF53293632B21304C0004005449465
  579. 40D9D20E163278BF18B9C13F2A20DCF1B7FC1900D1DBBF1B7FC1900D11C432D6
  580. E201036D6E201026D6E201016E1632D6E201016D6E2010263CE22D6E2010369C
  581. 2A2167E1AFE22D9D20B7FC18DBF150FA1B7FC19C2A26C7D1387C147A204B2A2B
  582. 2130B21305BF22D9D203303292CF18B9C19C2A26C7D1D6E201036B9DE1D50328
  583. 4E204044946565496328DBF11C432D6E201046E1632D6E2010168B9C19C2A26C
  584. 7D1D6E2010369C2A290DA190DA13CE2278BF1F88E1AFE229C2A25DF22387C1D6
  585. E201046B7FC1B7FC18DBF1387C1EF532B21305DF22EF53293632B213042AE"
  586. END_ASC
  587.  
  588.  
  589. BYTES: #EA24h 2917
  590.  
  591. BEGIN_UU poly.uue
  592. begin 644 poly
  593. M2%!(4#0X+466*O!_[A0````%0D%)4E,%G2W@82-[SY$L*LFB$DPC;2X0X-;F
  594. M`@%2;2X0,.5A(\,P0BLJ;2X0X)8L*F>KH<D?M*)"*RJTHH(P*IK\T3$J;2X0
  595. MX':V&D>C`AHC;2X0H-3F`@%*FOS1Y@(!4D>CHLD?[JUQMAIM+A`PQ34JFOSA
  596. MWAIGJW$T*K7\@;T?A_LA,RK0_-'F`@%2\Z*BR1_NK7&V&FTN$#"%,"J:_.'>
  597. M&F>KT3$JM?R!O1^&HP(X(_.BHLD?)K0Q+RJ:_"$S*IK\X=X:":TQ["*'^T$K
  598. M*G+IH>\BG2V`O1_)HI(L*BLQ4/LBG2T@,RJ:_"$S*IK\X=X:':.BR1]QHZ+)
  599. M'^ZMD=`:*?Q1\!H(HZ+)'W&CHLD?[JW!-2J:_'$T*IK\X=X:":WAP!\%K[$2
  600. M`]4O<K@?5#;2Y@(!4WDVLD0@O?MQN!]4-M+F`@%2>3:R1"#M,'*7`@``````
  601. M``````````````'NK7&V&A^J,9,"D0D```````&^ZW$T*M#\(3,J9/R1:R-M
  602. M+A#@1L8?R:+2Y@(!4I6IT>8"`5.5J3$O*H/'X5\C.3:R$@-.`S`0544TT-D"
  603. M'C:BE1P)T'&X'\FB8GP=!:\A"1W8^^'`']C[T;L?WJ)2\!J5J7&X'R:TX<`?
  604. M":U!-QNB^W&V&O.B`LT?":V18R,K,6`)``1$2596!)TMX&$CA_N1+"K&UQ%,
  605. M(VTN$!#6Y@(!8FTN$##F82-M+A`0EBPJQM?1Y@(!8P6O<;@?;2X0(.;>&FTN
  606. M$!"&FQS?T-'F`@%AO?N1T!I[SY$L*L?8D2PJ":UQ0!T)T-&[']C[T>8"`6+^
  607. M-9)C(RLQD`X``D51`C,I`````````!#0`0`$0T]%1@2=+>!A(\$TTN8"`45M
  608. M+A#@YF$CM*+2Y@(!;J`QTN8"`4FTHD)E(T@N$("59R/-#-+F`@%%OJ-!92-(
  609. M+A"`E6<C_@[2Y@(!150V@N0"`5AY-N+W'E0VTN8"`45Y-M+,(&TN$)`DL!L%
  610. MK\$D(]ZBTN8"`6[)HG*V&J`QTN8"`4EM+A"05,L?3#+2Y@(!;LFB<K8:@\?A
  611. M7R,Y-K(2`T(!4%!D!<645=#9`AXVDL(?PRYRN!^&R]$Q*G+IH>\BN,E1^R*=
  612. M+8";',FB8GP=*S%0_2+!--+F`@%A;2X0(-?F`@%N'C;2Y@(!8<FB8GP=PR[2
  613. MY@(!;LFBTL4>^B[2V0+>HM+F`@%NH#'2Y@(!:6TN$"#GWAIM+A`0UN8"`6G&
  614. MUW&V&DPRLA(#U2_B7R,Y-K(2`R$!0`#55,5$T-D"'C8BNA^XR=&['[C)$4PC
  615. M;2X0@-7F`@%9;2X@X);7Y@(";G@>-I(L*FTN(."&U^8"`FYY9ZN1+"H)K0$:
  616. M(VTN$)!$*RI,,I(L*FTN(."&!QHC;2X0D)0L*FTN(."6!QHC;2X0H-3F`@%)
  617. M;2X0H'2V&LFBDM`:M?S1Y@(!6&TN$)!D?!UM+A"0U>8"`4K&U^'>&F>KT>8"
  618. M`4EM+A"@=+8:R:*2T!K0_,$D(TPR0J<"*S&0+"IM+B#@AM?F`@)N>6>KD2PJ
  619. M":TQ$".]^W&V&DPRXE\C.3:R$@._`4``%41$1-#9`AXV(KH?N,G1NQ^XR1%,
  620. M(VTN$!#4Y@(!0FTN(.`FU.8"`FY!'C;2Y@(!04@N,,`D&]3F`@%"2"XPP"0;
  621. M-.PB;2X@X!;4Y@(";D*^ZZ'O(KW[4?TBPR[2Y@(";D%M+B#@)M2I'OHNTMD"
  622. MR:+2Y@(";D%M+B#@)I30&A^J,1`CM*+")",K,5#](FTN(.`6U.8"`FY"":WQ
  623. MH1K)HG*V&K7\L?<<R:)B?!UM+B#@%M3F`@)N0@FM\:$:9ZN1`!UGJX'D`@-,
  624. MLD'^-9)C(RLQ@!H``TRR00.=+>!A(\,N<K@?ALO1,2IRZ:'O(ITML/<<"="Q
  625. M$@.U+]+9`GO/D2PJQM<Q>!PK,5#](CDVLA(#>``@($4ET-D"'C:"Y`($5%))
  626. M38?[@9L<P332Y@(!;AXV,NPB;2X0X#8O*EWLH>\BG2UPN!](+E`@%)0D-=6[
  627. M'RG\@>0"!%!$25;8^Q%,(VTN$!#4Y@(!0AXVTN8"`4%(+B`@1=7F`@%"2"X@
  628. M($7E7R,K,5#[(ITM,.PB;2X0X.8M*EWLH>\B2"XP$%5%5/LBG2V@E1S8^U&9
  629. M&KW[4?`:*S%0_2(K,5#](OXUDF,C*S'`%0`$1D-44`2=+>!A(\,N<K@?N,DQ
  630. M+RI=[*'O(ITM<+@?2"Y0(!24)#75NQ\I_('D`@101$E6V/N!Y`($1D-44"LQ
  631. M4/TB.3:R$@.0`"``9230V0(>-O*M&G0JL!(#P332Y@(!6FTN$`#5Y@(#3TQ$
  632. M;2Y`P!0T1>5A(\FBTN8"`5"XR0$:(VTN$)#4Y@(!4&TN$)!D?!W!--+F`@)P
  633. M,1XV,NPB;2X@`!?3Y@(#3TQ$G>JA[R*=+=#F`@%:;2X@`!>#Y`(%15903%G)
  634. MHM+F`@%0N,D!&B-M+A"@-.PB;2X0`-7F`@%*QM?1Y@(!4&TN$)!D?!V=ZJ'O
  635. M(ITMT.8"`G`Q;2X0`-7F`@%*QM>1T!H%K[$2`]4OPB0C;2X@`!=#92-M+C#P
  636. MQ$249R/-#$*G`BLQ0&4C;2Y`P!0T195G(\T,LA(#M2_2V0+#+D*G`BLQT.8"
  637. M!$Q!4U1AYZ'O(ITMD"PJ="JP$@/)HM+F`@%0N,D!&B-M+A"PU.8"`5!M+A"P
  638. M9'P=PRYRN!]M+B``%R.7'OHN@KT?M2]RMAK5+\(D(T@N,)`D1=7F`@%:O?NQ
  639. M$@.U+]+9`FTN0,`4-$6U]QS8^[$2`]4O@N0"!%)$15*B^]$Q*IK\D2PJ9ZLQ
  640. M+RK0_#$O*H/'064C;2Y`P!0T195G(\T,TN8"`G`Q2"Y04&0%Q935NQ]M+B``
  641. M%X/D`@5%5E!,6;W[4?`:O?LAL!L%K[$2`]4OXE\C3#+2Y@(!4+C),7@<_C62
  642. M8R,K,2`]``101$52!)TMX&$C>\\13"-M+A#@YF$CR:+2Y@(!;J`QTN8"`6EM
  643. M+A#@5LL?;2X0X-;F`@%I":WAWAI,,H*]'\,NTN8"`6[)HB*7'OHN0J<"M**R
  644. M$@.U+]+9`FTN$."6+"H)K3%X'"LQ4/TB_C628R,K,5`.``-)4E0#G2W@82-[
  645. MSQ%,(VTN$.#F82/#+M+F`@%NM*+2Q1[Z+M+9`LFBTN8"`6X#,=+F`@%NM?Q!
  646. MIP+)HK(2`[W[49D:9ZO!)",K,5#[(G0JD"PJ*S%0_2+#+M+F`@%NR:+2Q1[Z
  647. M+M+9`MZBTN8"`6X#,8+D`@10355,3#*R$@/5+^)?(SDVLA(#$@%`($54)$70
  648. MV0(>-A),(VTN$Y@(!1QXVTN8"`4=M+A!@A.0"!%!$15)(+D``U53%U.8"
  649. M`4=(+D``150D1:<"AJ.R$@-(+D``U53%U.8"`49(+D``U53%A.0"!%!!1$1M
  650. M+A!PU.8"`4=(+D``U53%Y%\C.3:R$@/O`$!`)9741-#9`AXVLO<<P332Y@(!
  651. M;AXVTN8"`6XS,%++'X?[\:$:C^C1Y@(!;LFBDM`:@^?1!2.=+8"]'U0VTN8"
  652. M`6YY-J*:("LQ0&DC;2X0X`;-'VTN$.`V>!S^-9)C(RLQ0`P`!%!$258$G2W@
  653. M82.'^X&;'/.B`LT?>\^1`!V]^['W'`G0$4PC;2X0,-;F`@%B;2X0$.9A(VTN
  654. M$!#6Y@(!8L,NTN8"`6/)HA)V'OHNTMD">\^!O1\%K['W',FB8GP=@\=!IP*T
  655. MHK(2`RLQ4/LBG2TP`R,I_(&;',FB8GP=;2X0,+;9'ETP@N0"!$1)5E:4-H*]
  656. M'\$TTN8"`60>-M+F`@%AN,F1+"K&U]'F`@%CR:*2T!H)K3'L(H?[\8@>^BZ2
  657. E+"K5+S)X'&TN$$"V]QQ[SX&]'X/'X5\C*S%0_2+^-9)C(RLQ`"LQ
  658. `
  659. end
  660. END_UU
  661. -- 
  662. _______________________________________________________________________________
  663. Wayne Scott             |  INTERNET:   wscott@en.ecn.purdue.edu
  664. Electrical Engineering  |  BITNET:     wscott%ea.ecn.purdue.edu@purccvm
  665. Purdue University       |  UUCP:      {purdue, pur-ee}!en.ecn.purdue.edu!wscott
  666.  
  667.